package demo.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
import org.springframework.util.FileCopyUtils;

import java.io.IOException;
/**
 * @author Peter Schneider-Manzell
 */
public class PublicJwtConfig {
  @Autowired
  JwtAccessTokenConverter jwtAccessTokenConverter;
  @Bean
  @Qualifier("tokenStore")
  public TokenStore tokenStore() {
    System.out.println("Created JwtTokenStore");
    JwtTokenStore jwtTokenStore = new JwtTokenStore(jwtAccessTokenConverter);
    System.out.println("jwtTokenStore = " + jwtTokenStore);
    return jwtTokenStore;
  }
  @Bean
  protected JwtAccessTokenConverter jwtTokenEnhancer() {
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    Resource resource = new ClassPathResource("public.cert");
    String publicKey;
    try {
      publicKey = new String(FileCopyUtils.copyToByteArray(resource.getInputStream()));
      System.out.println("publicKey = " + publicKey);
    }
    catch (IOException e) {
      throw new RuntimeException(e);
    }
    converter.setVerifierKey(publicKey);
    return converter;
  }
}
